package y.q.h.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.session.RowBounds;

import java.io.Serializable;
import java.util.List;
/**
 * 动态 SQL 数据库访问层接口
 * @param <T> 实体类型
 * @param <ID> 主键类型
 */
//实体类型：User05
//主键类型：Integer
@Mapper
public interface SuperbDao<T, ID extends Serializable> {

    /**
     * 新增数据
     *
     * @param entity 条件
     * @return 影响行数
     */
    Integer insert(T entity);


    /**
     * 根据ID查询
     *
     * @param id id
     * @return 实体对象
     */
    T getById(ID id);

    /**
     * 单查 - 根据ID或者账户密码 - Map专用
     *
     * @param id id
     * @return {@link T}
     */
    T getById(T id);

    /**
     * 单查 - 根据ID或者账户密码
     *
     * @param entity 条件
     * @return 实体对象
     */
    T queryEntity(T entity);

    /**
     * 修改数据
     *
     * @param entity 条件
     * @return 影响行数
     */
    Integer update(T entity);

    /**
     * 删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    Integer deleteById(ID id);

    /**
     * 删除数据 - Map专用
     *
     * @param id 主键
     * @return 影响行数
     */
    Integer deleteById(T id);

    /**
     * 模糊查询 - 根据条件
     *
     * @param entity 条件
     * @return 实体对象列表
     */
    List<T> queryLike( T entity);
    /**
     * 分页查询 - 支持模糊查询
     *
     * @param rowBounds 分页对象
     * @return {@link List}<{@link T}>
     */
    List<T> getByRowBoundsLike(RowBounds rowBounds, T entity) ;

    /**
     * 精确查询 - 根据条件
     *
     * @param entity 条件
     * @return 实体对象列表
     */
    List<T> query( T entity);
    /**
     * 分页查询 - 精确查询
     *
     * @param rowBounds 分页对象
     * @param entity 条件
     * @return {@link List}<{@link T}>
     */
    List<T> getByRowBounds(RowBounds rowBounds, T entity) ;

    /**
     * 查询表中数据条数
     *
     * @param entity 实体
     * @return int
     */
    Integer count( T entity);




    // 其他自定义方法...

}
